package br.kanban.core.busines;

import java.io.Serializable;
import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.TypedQuery;

import br.kanban.core.persistence.Projeto;

@Stateless
public class ProjetoBO extends GenericBO<Projeto> implements Serializable{

	private static final long serialVersionUID = 1L;

	@Override
	public List<Projeto> pesquisar(Projeto filtro) {
		StringBuilder sql =new StringBuilder("from Projeto where 1=1 ");
		
		sql.append(filtro.getCodigo() != null ? "and codigo = :codigo " : "");
		sql.append(!filtro.getTitulo().isEmpty() ? "and upper(titulo) like :titulo " : "");
		sql.append(filtro.getCliente() != null ? "and cliente = :cliente " : "");
		sql.append(filtro.getStatus() != null ? "and status = :status " : "");
		sql.append(filtro.getDatainicio() != null ? "and datainicio = :datainicio " : "");
		sql.append(filtro.getDatafim() != null ? "and datafim = :datafim " : "");
		sql.append(filtro.getPreco() != null ? "and preco = preco " : "");
		
		TypedQuery<Projeto> qr = getEm().createQuery(sql.toString(), Projeto.class);
		
		if(filtro.getCodigo() != null)
			qr.setParameter("codigo", filtro.getCodigo());
		if(!filtro.getTitulo().isEmpty())
			qr.setParameter("titulo", "%" + filtro.getTitulo().toUpperCase() + "%");
		if(filtro.getCliente() != null)
			qr.setParameter("cliente", filtro.getCliente());
		if(filtro.getStatus() != null)
			qr.setParameter("status", filtro.getStatus());
		if(filtro.getDatainicio() != null)
			qr.setParameter("datainicio", filtro.getDatainicio());
		if(filtro.getDatafim() != null)
			qr.setParameter("datafim", filtro.getDatafim());
		if(filtro.getPreco() != null)
			qr.setParameter("preco", filtro.getPreco());
		
		return qr.getResultList();
	}

	
}
